﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Chilis.Caja.Core;
using Chilis.Caja.Data.Models;

namespace Chilis.Caja.Web.Controllers
{
    public class ArqueoController : Controller
    {
        //
        // GET: /Arqueo/

        private void CargarDenominaciones()
        {
            DenominacionService oDenominacionService = new DenominacionService();

            ViewBag.denobs = oDenominacionService.ObtenerPorTipo("deno-bs");
            ViewBag.denoms = oDenominacionService.ObtenerPorTipo("deno-ms");
            ViewBag.denobd = oDenominacionService.ObtenerPorTipo("deno-bd");
        }

        public ActionResult Seleccionar(String idArquero)
        {
            Session["IdAquero"] = idArquero;

            return RedirectToAction("Index");
        }


        public ActionResult Index()
        {
            Chilis.Caja.Data.Models.Arqueo oArqueo = null;

            if (Session["IdAquero"] != null)
            {
                ModelDataContext db = new ModelDataContext();

                oArqueo = (from n in db.Arqueo
                            where n.IdArqueo.Equals(Session["IdAquero"].ToString())
                            select n).First<Chilis.Caja.Data.Models.Arqueo>();

                Session["IdAquero"] = null;
            }
            
            CargarDenominaciones();

            return View(oArqueo);
        }


        [HttpPost]
        public ActionResult Index(FormCollection oFormCollection)
        {
            Chilis.Caja.Data.Models.Arqueo oArqueo = new Chilis.Caja.Data.Models.Arqueo();


            String suser = Session["user"].ToString();
            String sCaja = Session["Caja"].ToString();
            String sTurno = Session["Turno"].ToString();

            oArqueo.IdCaja = sCaja;
            oArqueo.IdTurno = sTurno;
            oArqueo.IdCajero = suser;
            oArqueo.IdAdministrador = "rpareja";
            oArqueo.TipoCambio = Decimal.Parse(Session["TipoCambio"].ToString());

            foreach (String sKey in oFormCollection.AllKeys)
            {
                if (sKey.Substring(0, 5).ToLower() == "deno-")
                { 

                    int iCantidad = int.Parse(oFormCollection[sKey].ToString());

                    if (iCantidad > 0)
                    {
                        Chilis.Caja.Data.Models.DetalleArqueo oDetalleArqueo = new Data.Models.DetalleArqueo();

                        oDetalleArqueo.CodigoArqueo = "1";
                        oDetalleArqueo.CodigoDenominacion = sKey;
                        oDetalleArqueo.CantidadDenominacion = iCantidad;

                        oArqueo.DetalleArqueo.Add(oDetalleArqueo);
                    }

                }
            }

            ArqueoService oArqueoService = new ArqueoService();

            if (oFormCollection["txtIdArqueo"] == null || oFormCollection["txtIdArqueo"] == string.Empty)
            {
                oArqueo = oArqueoService.insertar(oArqueo);
            }
            else
            {
                oArqueo.IdArqueo = oFormCollection["txtIdArqueo"];
                oArqueo = oArqueoService.actualizar(oArqueo);
            }

            CargarDenominaciones();

            return View(oArqueo);
        }

        public ActionResult Buscar()
        {
            ModelDataContext db = new ModelDataContext();

            List<Arqueo> lsArqueo = (from n in db.Arqueo
                                     select n).ToList<Arqueo>();

            List<Resultado> lsResultado = new List<Resultado>();

            foreach (Arqueo oArqueo in lsArqueo)
            {
                Resultado oResultado = new Resultado();

                oResultado.Arqueo = oArqueo.IdArqueo;
                oResultado.Fecha = oArqueo.FechaHoraArqueo.ToShortDateString();
                oResultado.Turno = oArqueo.Turno.DescripcionTurno;
                oResultado.Hora = oArqueo.FechaHoraArqueo.ToShortTimeString();
                oResultado.Cajero = oArqueo.Cajero.IdCajero;
                oResultado.Caja = oArqueo.Caja.NombreCaja;

                lsResultado.Add(oResultado);
            }

            return Json(lsResultado, JsonRequestBehavior.AllowGet);
        }
    }

    public class Resultado
    {
        public string Arqueo { get; set; }
        public string Fecha { get; set; }
        public string Turno { get; set; }
        public string Hora { get; set; }
        public string Cajero { get; set; }
        public string Caja { get; set; }

    }

}
